﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Studio7i.Negocio;
using Studio7i.Dominio;

namespace Studio7i.Controllers
{
    public class ServicioController : Controller
    {
        #region Dependencias
        IAdministracionService AdminService { get; set; }

        //private ICollection<SelectListItem> ListadoServicios()
        //{
        //    ICollection<SelectListItem> servicios = new List<SelectListItem>();
        //    servicios.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
        //    foreach (Servicio servicio in AdminService.ListarServicios())
        //        servicios.Add(new SelectListItem()
        //        {
        //            Value = servicio.CodServ.ToString(),
        //            Text = servicio.Descripcion,
        //           // Value = servicio.CostoHora
        //        });
        //    return servicios;
        //}

        #endregion

        public ActionResult Index()
        {
            ICollection<Servicio> modelo = AdminService.ListarServicios();
            return View(modelo);
        }

        [HttpPost]
        public ActionResult Buscar(string descripcion)
        {
            ICollection<Servicio> modelo = AdminService.ListarServiciosXDescripcion(descripcion);
            return View("Index", modelo);
        }

        public ActionResult Creacion() // Genera la vista Views/Local/Creacion.aspx
        {
            return View();
        }
        [HttpPost]
        public ActionResult Crear(FormCollection formulario) // Recibe el formulario de Creacion.aspx
        {
            // Capturamos los datos del formulario enviado desde Creacion.aspx
            Servicio servicioACrear = new Servicio()
            {
                Descripcion = (string)formulario["Descripcion"],
                CostoHora = int.Parse(formulario["CostoHora"])
            };
            // Coordinamos con el negocio para la funcionalidad
            try
            {
                Servicio servicioCreado = AdminService.CrearServicio(servicioACrear);
                TempData["mensaje"] = "Servicio " + servicioCreado.CodServ + " creado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", servicioACrear); // Problemas! De nuevo a Creacion.aspx
            }
        }
        public ActionResult Editar(int Codigo) // Genera la vista Views/Local/Modificacion.aspx
        {
            return View(AdminService.ObtenerServicio(Codigo));
        }

        [HttpPost]
        public ActionResult Modificar(FormCollection formulario) // Recibe el formulario de Modificacion.aspx
        {
            Servicio servicioAModificar = new Servicio()
            {
                CodServ = int.Parse(formulario["CodServ"]),
                Descripcion = (string)formulario["Descrip"],
                CostoHora = int.Parse(formulario["CostoHora"])
            };
            try
            {
                Servicio servicioModificado = AdminService.ModificarServicio(servicioAModificar);
                TempData["mensaje"] = "Servicio " + servicioModificado.CodServ + " modificado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", servicioAModificar); // Problemas! De nuevo a Modificacion.aspx
            }
        }

        public ActionResult Eliminacion(int Codigo) // Genera la vista Views/Local/Eliminacion.aspx
        {
            return View(AdminService.ObtenerServicio(Codigo));
        }

        [HttpPost]
        public ActionResult Eliminar(int Codigo) // Recibe el formulario de Eliminacion.aspx
        {
            try
            {
                Servicio servicioAEliminar = AdminService.ObtenerServicio(Codigo);
                AdminService.EliminarServicio(servicioAEliminar);
                TempData["mensaje"] = "Servicio " + servicioAEliminar.CodServ + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Eliminacion", AdminService.ObtenerServicio(Codigo)); // Problemas! De nuevo a Eliminacion.aspx
            }
        }
    }
}

